package com.xadrez;

import com.xadrez.controlador.MovimentoControlador;
import com.xadrez.modelo.Posicao;
import com.xadrez.ia.MiniMax;
import com.xadrez.modelo.Bispo;
import com.xadrez.modelo.Cavalo;
import com.xadrez.modelo.Jogador;
import com.xadrez.modelo.Peao;
import com.xadrez.modelo.Rainha;
import com.xadrez.modelo.Rei;
import com.xadrez.modelo.Tabuleiro;
import com.xadrez.modelo.Torre;
import com.xadrez.view.Tela;
import com.xadrez.view.InicializadorView;

public class Principal {

    private static Jogador jogadorUm = new Jogador();  // humano
    private static Jogador jogadorDois = new MiniMax(); // IA
    private static Jogador jogadorDaVez = new Jogador();
    private static Tabuleiro tabuleiro = new Tabuleiro();

    public static void main(String[] args) {
        //1. Inicializa Tabuleiro
        inicializaTabuleiro();
        //2. Inicializa View
        InicializadorView.inicializaCores();
        Tela.roda();
        //3. Começa a partida
        //Ficaremos aqui dentro até terminar a partida.
        MovimentoControlador.rodaAPartida(jogadorUm, jogadorDois);
    }

    public static void inicializaTabuleiro() {

        //COLOCA PECAS DO JOGADOR MAQUINA
        tabuleiro.getQuadrados()[0][0] = new Torre(jogadorDois);
        tabuleiro.getQuadrados()[0][0].setPosicaoNoTabuleiro(new Posicao(0, 0));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][0]);

        tabuleiro.getQuadrados()[0][1] = new Cavalo(jogadorDois);
        tabuleiro.getQuadrados()[0][1].setPosicaoNoTabuleiro(new Posicao(0, 1));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][1]);

        tabuleiro.getQuadrados()[0][2] = new Bispo(jogadorDois);
        tabuleiro.getQuadrados()[0][2].setPosicaoNoTabuleiro(new Posicao(0, 2));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][2]);

        tabuleiro.getQuadrados()[0][3] = new Rei(jogadorDois);
        tabuleiro.getQuadrados()[0][3].setPosicaoNoTabuleiro(new Posicao(0, 3));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][3]);

        tabuleiro.getQuadrados()[0][4] = new Rainha(jogadorDois);
        tabuleiro.getQuadrados()[0][4].setPosicaoNoTabuleiro(new Posicao(0, 4));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][4]);

        tabuleiro.getQuadrados()[0][5] = new Bispo(jogadorDois);
        tabuleiro.getQuadrados()[0][5].setPosicaoNoTabuleiro(new Posicao(0, 5));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][5]);

        tabuleiro.getQuadrados()[0][6] = new Cavalo(jogadorDois);
        tabuleiro.getQuadrados()[0][6].setPosicaoNoTabuleiro(new Posicao(0, 6));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][6]);

        tabuleiro.getQuadrados()[0][7] = new Torre(jogadorDois);
        tabuleiro.getQuadrados()[0][7].setPosicaoNoTabuleiro(new Posicao(0, 7));
        tabuleiro.add(2, tabuleiro.getQuadrados()[0][7]);

        tabuleiro.getQuadrados()[1][0] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][0].setPosicaoNoTabuleiro(new Posicao(1, 0));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][0]);

        tabuleiro.getQuadrados()[1][1] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][1].setPosicaoNoTabuleiro(new Posicao(1, 1));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][1]);

        tabuleiro.getQuadrados()[1][2] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][2].setPosicaoNoTabuleiro(new Posicao(1, 2));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][2]);

        tabuleiro.getQuadrados()[1][3] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][3].setPosicaoNoTabuleiro(new Posicao(1, 3));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][3]);

        tabuleiro.getQuadrados()[1][4] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][4].setPosicaoNoTabuleiro(new Posicao(1, 4));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][4]);

        tabuleiro.getQuadrados()[1][5] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][5].setPosicaoNoTabuleiro(new Posicao(1, 5));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][5]);

        tabuleiro.getQuadrados()[1][6] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][6].setPosicaoNoTabuleiro(new Posicao(1, 6));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][6]);

        tabuleiro.getQuadrados()[1][7] = new Peao(jogadorDois);
        tabuleiro.getQuadrados()[1][7].setPosicaoNoTabuleiro(new Posicao(1, 7));
        tabuleiro.add(2, tabuleiro.getQuadrados()[1][7]);

        //COLOCA PECAS DO JOGADOR HUMANO
        tabuleiro.getQuadrados()[6][0] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][0].setPosicaoNoTabuleiro(new Posicao(6, 0));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][0]);

        tabuleiro.getQuadrados()[6][1] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][1].setPosicaoNoTabuleiro(new Posicao(6, 1));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][1]);

        tabuleiro.getQuadrados()[6][2] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][2].setPosicaoNoTabuleiro(new Posicao(6, 2));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][2]);

        tabuleiro.getQuadrados()[6][3] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][3].setPosicaoNoTabuleiro(new Posicao(6, 3));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][3]);

        tabuleiro.getQuadrados()[6][4] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][4].setPosicaoNoTabuleiro(new Posicao(6, 4));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][4]);

        tabuleiro.getQuadrados()[6][5] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][5].setPosicaoNoTabuleiro(new Posicao(6, 5));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][5]);

        tabuleiro.getQuadrados()[6][6] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][6].setPosicaoNoTabuleiro(new Posicao(6, 6));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][6]);

        tabuleiro.getQuadrados()[6][7] = new Peao(jogadorUm);
        tabuleiro.getQuadrados()[6][7].setPosicaoNoTabuleiro(new Posicao(6, 7));
        tabuleiro.add(1, tabuleiro.getQuadrados()[6][7]);

        tabuleiro.getQuadrados()[7][0] = new Torre(jogadorUm);
        tabuleiro.getQuadrados()[7][0].setPosicaoNoTabuleiro(new Posicao(7, 0));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][0]);

        tabuleiro.getQuadrados()[7][1] = new Cavalo(jogadorUm);
        tabuleiro.getQuadrados()[7][1].setPosicaoNoTabuleiro(new Posicao(7, 1));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][1]);

        tabuleiro.getQuadrados()[7][2] = new Bispo(jogadorUm);
        tabuleiro.getQuadrados()[7][2].setPosicaoNoTabuleiro(new Posicao(7, 2));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][2]);

        tabuleiro.getQuadrados()[7][3] = new Rei(jogadorUm);
        tabuleiro.getQuadrados()[7][3].setPosicaoNoTabuleiro(new Posicao(7, 3));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][3]);

        tabuleiro.getQuadrados()[7][4] = new Rainha(jogadorUm);
        tabuleiro.getQuadrados()[7][4].setPosicaoNoTabuleiro(new Posicao(7, 4));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][4]);

        tabuleiro.getQuadrados()[7][5] = new Bispo(jogadorUm);
        tabuleiro.getQuadrados()[7][5].setPosicaoNoTabuleiro(new Posicao(7, 5));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][5]);

        tabuleiro.getQuadrados()[7][6] = new Cavalo(jogadorUm);
        tabuleiro.getQuadrados()[7][6].setPosicaoNoTabuleiro(new Posicao(7, 6));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][6]);

        tabuleiro.getQuadrados()[7][7] = new Torre(jogadorUm);
        tabuleiro.getQuadrados()[7][7].setPosicaoNoTabuleiro(new Posicao(7, 7));
        tabuleiro.add(1, tabuleiro.getQuadrados()[7][7]);
    }

    public static Jogador getJogadorAdversario(){
        Jogador jogadorAdversario = jogadorUm;
        if(jogadorDaVez.equals(jogadorUm)){
            jogadorAdversario = jogadorDois;
        }
        return jogadorAdversario;
    }
    
    // <editor-fold defaultstate="collapsed" desc="GETS E SETS">
    public static Tabuleiro getTabuleiro() {
        return tabuleiro;
    }

    public static Jogador getJogadorDois() {
        return jogadorDois;
    }

    public static void setJogadorDois(Jogador jogadorDois) {
        Principal.jogadorDois = jogadorDois;
    }

    public static Jogador getJogadorUm() {
        return jogadorUm;
    }

    public static void setJogadorUm(Jogador jogadorUm) {
        Principal.jogadorUm = jogadorUm;
    }

    public static Jogador getJogadorDaVez() {
        return jogadorDaVez;
    }

    public static void setJogadorDaVez(Jogador jogadorDaVez) {
        Principal.jogadorDaVez = jogadorDaVez;
    }
    // </editor-fold>    
}
